home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / msdos / mxmenu.zip / WORM.INC < prev   
Text File  |  1993-05-14  |  5KB  |  241 lines

  1. Comment
  2. ==========================================================
  3.  
  4. WORM.INC Copyright 1991 by Marc Perkel
  5.  
  6. This is a sample of an external screen blanker for MarxMenu. It is
  7. similar to the worm blankers on Novell file servers.
  8.  
  9. To use this program add the line INCLUDE 'WORM.INC' in your menu.
  10.  
  11. When MarxMenu decides to blank the screen it calls BlankScreenProgram.
  12. When MarxMenu decides it's ready to unblank the screen it sets UnBlank
  13. to true.
  14.  
  15. Thus commands like UseNovPassword, LockWord, and BlankTime will work
  16. with your screen blanker.
  17.  
  18. When using and external screen blanker allong with IdleProgram, MarxMenu
  19. will shut off calls to your IdleProgram when the BlankScreenProgram
  20. starts. Thus, you will have to call your IdleProgram routines fron your
  21. BlankScreenProgram if you want them to run.
  22.  
  23. ==========================================================
  24. EndComment
  25.  
  26. Var
  27.   WormData
  28.   WormColor
  29.   WormSpeed
  30.   WormLen = 4
  31.   TargetWormLen
  32.   Direction
  33.   Duration
  34.   WSeg
  35.  
  36. Qualifier X Y Col
  37.  
  38. ;----- This tells MarxMenu to RunWorm when it is time to blank the screen
  39.  
  40. BlankScreenProgram = Loc RunWorm
  41.  
  42. Var T1 T2
  43.  
  44. T1[1,1] = 2
  45. T1[1,2] = 0
  46. T1[2,1] = 2
  47. T1[2,2] = -1
  48. T1[3,1] = 1
  49. T1[3,2] = -1
  50. T1[4,1] = 0
  51. T1[4,2] = -1
  52. T1[5,1] = -1
  53. T1[5,2] = -1
  54. T1[6,1] = -2
  55. T1[6,2] = -1
  56. T1[7,1] = -2
  57. T1[7,2] = 0
  58. T1[8,1] = -2
  59. T1[8,2] = 1
  60. T1[9,1] = -1
  61. T1[9,2] = 1
  62. T1[10,1] = 0
  63. T1[10,2] = 1
  64. T1[11,1] = 1
  65. T1[11,2] = 1
  66. T1[12,1] = 2
  67. T1[12,2] = 1
  68.  
  69. T2[10] = 0
  70. T2[5] = 1
  71. T2[4] = 2
  72. T2[3] = 3
  73. T2[2] = 4
  74. T2[1] = 5
  75. T2[6] = 6
  76. T2[11] = 7
  77. T2[12] = 8
  78. T2[13] = 9
  79. T2[14] = 10
  80. T2[15] = 11
  81.  
  82. if ColorScreen
  83.    Loop 30
  84.       WSeg[LoopIndex] = '██'
  85.    EndLoop
  86. else
  87.    WSeg = Set ['██','▓▓','▒▒','░░']
  88. endif
  89.  
  90. TargetWormLen = WormLen
  91.  
  92. ;----- End of Initialization
  93.  
  94. Procedure StartWorm
  95.    NewWormSpeed
  96.    Loop WormLen
  97.       WormData[LoopIndex].X = LoopIndex * 2 + 40
  98.       WormData[LoopIndex].Y = 12
  99.       WormData[LoopIndex].Col = NextWormColor
  100.    EndLoop
  101. EndProc
  102.  
  103.  
  104. Procedure MoveWorm
  105. var DeltaX DeltaY WormSeg
  106.    ResetDuration
  107.    while Duration > 0
  108.       WormSeg = WormLen
  109.       if TargetWormLen > WormLen
  110.          WormLen = WormLen + 1
  111.          WormSeg = WormSeg + 1
  112.       else
  113.          GotoXY(WormData[WormSeg].X,WormData[WormSeg].Y)
  114.          Write '  '
  115.          if TargetWormLen < WormLen
  116.             WormLen = WormLen - 1
  117.             WormSeg = WormSeg - 1
  118.             GotoXY(WormData[WormSeg].X,WormData[WormSeg].Y)
  119.             Write '  '
  120.          endif
  121.       endif
  122.  
  123.       while WormSeg > 1
  124.          WormData[WormSeg] = WormData[WormSeg - 1]
  125.          GotoXY(WormData[WormSeg].X,WormData[WormSeg].Y)
  126.          TextColor WormData[WormSeg].Col Black
  127.          Write WSeg[WormSeg]
  128.          WormSeg = WormSeg - 1
  129.       endwhile
  130.  
  131.       DeltaX = T1[Direction + 1,1]
  132.       DeltaY = T1[Direction + 1,2]
  133.       if (WormData[1].X + DeltaX < 1) or (WormData[1].X + DeltaX + 1 >= ScreenWidth)
  134.          DeltaX = DeltaX * -1
  135.          NewWormSpeed
  136.       endif
  137.       if (WormData[1].Y + DeltaY < 1) or (WormData[1].Y + DeltaY > ScreenHeight)
  138.          DeltaY = DeltaY * -1
  139.          NewWormSpeed
  140.       endif
  141.       Direction = T2[DeltaY * 5 + DeltaX + 8]
  142.       WormData[1].X = WormData[1].X + DeltaX
  143.       WormData[1].Y = WormData[1].Y + DeltaY
  144.       WormData[1].Col = NextWormColor
  145.  
  146.       GotoXY(WormData[1].X,WormData[1].Y)
  147.       TextColor WormData[1].Col Black
  148.       Write WSeg[1]
  149.  
  150.       if UnBlank then Return
  151.       Wait WormSpeed
  152.       Duration = Duration - 1
  153.    EndWhile
  154. EndProc
  155.  
  156.  
  157. Procedure NextWormColor
  158.    WormColor = WormColor + 1 mod 7
  159.    if ColorScreen
  160.       Return WormColor + 9
  161.    else
  162.       Return 7
  163.    endif
  164. EndProc
  165.  
  166.  
  167. Procedure NewWormSpeed
  168.    WormSpeed = Random mod 20 + 7
  169.    if ScrollLock then WormSpeed = WormSpeed / 2
  170.    if ColorScreen then TargetWormLen = 30 / WormSpeed + 3
  171.    Duration = 0
  172. EndProc
  173.  
  174.  
  175. Procedure ResetDuration
  176.    Duration = Random mod 3 + WormLen - 1
  177. EndProc
  178.  
  179.  
  180. Procedure NewVector
  181. var A
  182.    A = Random mod 188
  183.    if A = 0 then Return 6
  184.    if A <= 2 then Return 5
  185.    if A <= 4 then Return 7
  186.    if A <= 8 then Return 4
  187.    if A <= 12 then Return 8
  188.    if A <= 20 then Return 3
  189.    if A <= 28 then Return 9
  190.    if A <= 44 then Return 2
  191.    if A <= 60 then Return 10
  192.    if A <= 92 then Return 1
  193.    if A <= 124 then Return 11
  194.    Return 0
  195. EndProc
  196.  
  197.  
  198. Procedure RunWorm
  199.    StartWorm
  200.    Direction = 6
  201.    while not UnBlank
  202.       MoveWorm
  203.       Direction = Direction + NewVector mod 12
  204.  
  205.       ;--- this runs tape backup at 11:30 pm
  206.  
  207.       TapeBackup
  208.  
  209.    EndWhile
  210. EndProc
  211.  
  212.  
  213. ;----- This is an example of how to run a tape at 11:30 pm
  214.  
  215. Procedure TapeBackup
  216. var BackupTime
  217.  
  218.    ;--- Must be my server
  219.  
  220.    if NovDefaultServer <> 'TYME' then Return
  221.  
  222.    ;--- Must be Station with Tape Drive
  223.  
  224.    if NovStationAddress <> '250:329C5' then Return
  225.  
  226.    ;--- Must be on WeekDays
  227.  
  228.    if (DayOfWeek = 0) or (DayOfWeek = 6) then Return
  229.  
  230.    ;--- Run it at BackupTime
  231.  
  232.    BackupTime = TimeOf('11:30pm')
  233.    if (Now < BackupTime) or (Now > (BackupTime + 30)) then Return
  234.  
  235.    ;--- Runs TAPE.MNU
  236.  
  237.    Bat 'MARX TAPE'
  238.    exitmenu
  239.  
  240. EndProc
  241.